class Tree {
  /**
   * 树的算法
   * @params list     待转化数组
   * @params parentId 起始节点
   */
  getTrees (list, parentId) {
    if (parentId === undefined) {
      parentId = 0
    }
    let items = {}
    // 获取每个节点的直属子节点，*记住是直属，不是所有子节点
    for (let i = 0; i < list.length; i++) {
      if (list[i].parentId === '' || list[i].parentId === undefined) {
        list[i].parentId = 0
      }
      let key = list[i].parentId
      if (items[key]) {
        items[key].push(list[i])
      } else {
        items[key] = []
        items[key].push(list[i])
      }
    }
    return this.formatTree(items, parentId)
  }

  /**
   * 利用递归格式化每个节点
   * @param items
   * @param parentId
   * @param parent
   * @returns {Array}
   */
  formatTree (items, parentId) {
    let result = []
    // 递归结束条件
    if (!items[parentId]) {
      return result
    }
    for (let t of items[parentId]) {
      // 递归调用
      t.children = this.formatTree(items, t.id)
      result.push(t)
    }
    return result
  }
}
export default Tree
